#ifndef __POOL_H_
#define __POOL_H_
#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<time.h>
#include<string.h>
#include<pthread.h>
#include<signal.h>
typedef struct _task
{
    void*(*fun)(void *);            //线程函数就长这样
    void* argp;                      //线程函数的参数
    struct _task *next;             //列表指针
}task;

typedef struct _pool
{
    int thread_num;                 //线程池中开启的任务数
    int queue_num;                  //任务队列当前的任务书
    int queue_max_size;             //任务队列的容量
    int running;                    //线程池运行

    pthread_mutex_t     mutex;      //互斥锁
    pthread_cond_t      queue_empty;//用于阻塞线程的条件变量
    pthread_cond_t      queue_full; //用于阻塞任务添加模块的条件变量

    pthread_t           *id;        //用于存储线程ID
    task              *head;        //任务队列的队头指针
    task              *tail;        //任务队列的队尾指针  

    

}thread_pool;


int threadpool_init(thread_pool* pool,int tnum,int qsize);
int task_add(thread_pool* pool,void* (*fun)(void*),void* argp);
void* thread_fun(void* agrp);
void threadpool_destry(thread_pool*);
void* fun(void* argp);
void handler(int sig);


#endif 